iT邦幫忙

2023 iThome 鐵人賽

DAY 9
1
Software Development

Qt 6 跨平台應用程式開發系列 第 9

D09: 常用元件介紹 QLineEdit

  • 分享至 

  • xImage
  •  

昨天我們介紹了兩個常用圖形元件「按鈕 QSlider」和「數字框 QSpinBox」以及它們的基本用法。

今天是星期天,所以內容比較簡短一點,介紹常見的元件: QLineEdit 文字輸入框。

QLineEdit 文字輸入框

文字輸入框,所有圖形程式框架都一定會有的基本元件。Qt 的文字輸入框叫做 QLineEdit,可以處理各式各樣的文字輸入,比如要求使用者註冊帳號時,輸入姓名、Email、地址等等,都是不可或缺的。

QLineEdit 的基本用法:先用 new 創建一個文字框物件。setPlaceholderText(QString) 可以在使用者還沒輸入文字之前,用淡灰色提示文字框的用途。

setText(QString) 可以設定文字框內的文字,text() 則可取得當前文字框內的字串。setFocus()則可以讓文字框獲取鍵盤焦點,讓鍵盤輸入文字。

QLineEdit* lineEdit = new QLineEdit;
lineEdit->setPlaceholderText("Placeholder Text");
lineEdit->setFocus();

最常用的信號(signal)則是 QLineEdit::textChanged(),只要文字框內容有異動,元件就會發出這個信號。

範例:統一發票對獎

以下示範使用 QLineEdit 讀取發票號碼,然後比對發票號碼,告知使用者是否中獎。

為了讓範例程式精簡易讀,我只寫死了112年 05 ~ 06 月的一組特獎號碼。

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QVBoxLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;

    QLabel* label = new QLabel("請輸入112年 05 ~ 06 月統一發票號碼");
    QLabel* label2 = new QLabel("");

    QLineEdit* lineEdit = new QLineEdit;
    lineEdit->setPlaceholderText("八位數號碼");
    lineEdit->setFocus();

    QVBoxLayout* layout = new QVBoxLayout;
    w.setLayout(layout);

    layout->addWidget(label);
    layout->addWidget(lineEdit);
    layout->addWidget(label2);

    QObject::connect(lineEdit, &QLineEdit::textChanged, [=]
    {
        // 使用者輸入文字後,會呼叫此 lambda 函數
        if ("29268886" == lineEdit->text())
        {
            label2->setText("恭喜你!中了特獎1000萬元");
        }
        else
        {
            label2->setText("您沒有中特獎");
        }
    });

    w.show();
    return a.exec();
}

QLineEdit

雖然只能比對寫死的字串有點無趣,但是畢竟這只是作為 QLineEdit 的使用範例。未來你熟練 Qt 後,何不思考如何擴展這隻程式,讓它功能更加強大一些?


上一篇
D08: 常用元件介紹 QSlider / QSpinBox
下一篇
D10: 常用元件介紹 QComboBox
系列文
Qt 6 跨平台應用程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
ny88402
iT邦新手 3 級 ‧ 2024-07-23 16:09:02

您好,程式碼的這段
QObject::connect(lineEdit, QLineEdit::textChanged, [=]
應該是這樣
QObject::connect(lineEdit,&QLineEdit::textChanged,[=]

chchwy iT邦新手 4 級 ‧ 2024-07-25 17:21:48 檢舉

謝謝,已經更正!

我要留言

立即登入留言